#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import webbrowser
import importlib.util
import traceback

# 检查必要的模块是否已安装
def check_module(module_name):
    """检查模块是否已安装"""
    return importlib.util.find_spec(module_name) is not None

# 检查基本依赖
required_modules = ['requests', 'bs4']
missing_modules = [module for module in required_modules if not check_module(module)]

if missing_modules:
    print("缺少必要的依赖包，请安装以下包：")
    for module in missing_modules:
        print(f"pip install {module}")
    print("\n安装完成后重新运行程序。")
    sys.exit(1)

# 导入项目模块
try:
    from bilibili_bangumi_crawler import BiliBangumiCrawler
    from generate_html import BangumiHTMLGenerator
    from export_utils import BangumiExporter, install_required_packages
except ImportError as e:
    print(f"导入项目模块时出错: {e}")
    print("请确保所有项目文件都在同一目录下。")
    sys.exit(1)

def print_banner():
    """打印程序横幅"""
    banner = """
    ╔══════════════════════════════════════════════╗
    ║                                              ║
    ║   B站追番列表爬虫与展示系统 v1.1             ║
    ║                                              ║
    ╚══════════════════════════════════════════════╝
    """
    print(banner)

def main():
    """主程序入口"""
    print_banner()
    
    print("欢迎使用B站追番列表爬虫与展示系统！")
    print("本程序将帮助你获取B站追番列表并生成美观的HTML页面展示。\n")
    
    # 检查工作目录
    print(f"当前工作目录: {os.getcwd()}")
    
    # 询问用户是否需要爬取数据
    data_file = 'bangumi_data.json'
    try:
        if os.path.exists(data_file):
            print(f"检测到已有数据文件: {data_file}")
            choice = input("是否重新爬取数据？(y/n): ").strip().lower()
            if choice == 'y':
                crawler = BiliBangumiCrawler()
                crawler.run()
        else:
            print("未检测到数据文件，需要先爬取数据。")
            crawler = BiliBangumiCrawler()
            crawler.run()
    except Exception as e:
        print(f"爬取数据时出错: {e}")
        print("请检查网络连接和B站Cookie是否有效。")
        traceback.print_exc()
        sys.exit(1)
    
    # 检查数据文件是否存在
    if not os.path.exists(data_file):
        print(f"错误: 数据文件 {data_file} 不存在，爬取可能失败。")
        sys.exit(1)
    
    # 生成HTML页面
    print("\n开始生成HTML页面...")
    try:
        generator = BangumiHTMLGenerator(data_file)
        success = generator.run()
    except Exception as e:
        print(f"生成HTML页面时出错: {e}")
        traceback.print_exc()
        sys.exit(1)
    
    if success:
        # 自动打开生成的HTML页面
        html_path = os.path.join(os.getcwd(), 'bangumi_page', 'index.html')
        
        # 检查HTML文件是否存在
        if not os.path.exists(html_path):
            print(f"警告: HTML文件 {html_path} 不存在，可能生成失败。")
        else:
            html_url = f"file://{html_path}"
            
            print("\n是否要在浏览器中打开生成的页面？")
            open_choice = input("请输入 (y/n): ").strip().lower()
            
            if open_choice == 'y':
                try:
                    print(f"正在打开: {html_url}")
                    webbrowser.open(html_url)
                except Exception as e:
                    print(f"打开浏览器时出错: {e}")
        
        # 询问用户是否需要导出数据
        print("\n是否需要导出追番列表？")
        print("1. 导出为PDF")
        print("2. 导出为图片")
        print("3. 不导出")
        export_choice = input("请选择 (1/2/3): ").strip()
        
        if export_choice in ['1', '2']:
            # 询问导出的番剧状态
            print("\n选择要导出的番剧状态:")
            print("1. 全部番剧")
            print("2. 仅追番中")
            print("3. 仅已看完")
            status_choice = input("请选择 (1/2/3): ").strip()
            
            filter_status = None
            if status_choice == '2':
                filter_status = 'watching'
            elif status_choice == '3':
                filter_status = 'finished'
            
            try:
                # 安装所需的依赖包
                install_required_packages()
                
                # 创建导出器
                exporter = BangumiExporter(data_file)
                
                # 执行导出
                if export_choice == '1':
                    print("\n正在导出为PDF...")
                    pdf_file = exporter.export_to_pdf(filter_status)
                    if pdf_file and os.path.exists(pdf_file):
                        print(f"PDF文件已保存到: {pdf_file}")
                        
                        # 询问是否打开PDF文件
                        open_pdf = input("是否打开PDF文件？(y/n): ").strip().lower()
                        if open_pdf == 'y':
                            try:
                                pdf_url = f"file://{os.path.abspath(pdf_file)}"
                                webbrowser.open(pdf_url)
                            except Exception as e:
                                print(f"打开PDF文件时出错: {e}")
                    else:
                        print("导出PDF失败。")
                else:
                    print("\n正在导出为图片...")
                    img_file = exporter.export_to_image(filter_status)
                    if img_file and os.path.exists(img_file):
                        print(f"图片文件已保存到: {img_file}")
                    else:
                        print("导出图片失败。")
            except Exception as e:
                print(f"导出过程中出错: {e}")
                traceback.print_exc()
                print("\n导出功能需要额外的依赖包，请手动安装:")
                print("pip install weasyprint pillow")
        
        print("\n程序执行完毕！")
        print(f"HTML页面路径: {html_path}")
        print("你可以随时手动打开此文件查看你的追番列表。")
    else:
        print("\n生成HTML页面失败，请检查错误信息。")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n程序已被用户中断。")
        sys.exit(0)
    except ImportError as e:
        print(f"\n导入模块错误: {e}")
        print("请确保已安装所有必要的依赖包。")
        sys.exit(1)
    except Exception as e:
        print(f"\n程序执行出错: {e}")
        traceback.print_exc()
        sys.exit(1)